↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PrologToPiTRSProof
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
LOG2_IN_AG(X, Y) → U1_AG(X, Y, log2_in_aggg(X, 0, s(0), Y))
LOG2_IN_AG(X, Y) → LOG2_IN_AGGG(X, 0, s(0), Y)
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → U2_AGGG(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → U3_AGGG(X, Half, Acc, Y, small_in_a(X))
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_A(X)
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → U4_AGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → U2_GGGG(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → U4_GGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(X, Half, Y, Y) → U5_GGGG(X, Half, Y, small_in_g(X))
LOG2_IN_GGGG(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGG(X, Half, Y, small_out_g(X)) → U6_GGGG(X, Half, Y, small_in_g(Half))
U5_GGGG(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
LOG2_IN_AGGG(X, Half, Y, Y) → U5_AGGG(X, Half, Y, small_in_a(X))
LOG2_IN_AGGG(X, Half, Y, Y) → SMALL_IN_A(X)
U5_AGGG(X, Half, Y, small_out_a(X)) → U6_AGGG(X, Half, Y, small_in_g(Half))
U5_AGGG(X, Half, Y, small_out_a(X)) → SMALL_IN_G(Half)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PrologToPiTRSProof
LOG2_IN_AG(X, Y) → U1_AG(X, Y, log2_in_aggg(X, 0, s(0), Y))
LOG2_IN_AG(X, Y) → LOG2_IN_AGGG(X, 0, s(0), Y)
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → U2_AGGG(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → U3_AGGG(X, Half, Acc, Y, small_in_a(X))
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_A(X)
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → U4_AGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → U2_GGGG(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → U4_GGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(X, Half, Y, Y) → U5_GGGG(X, Half, Y, small_in_g(X))
LOG2_IN_GGGG(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGG(X, Half, Y, small_out_g(X)) → U6_GGGG(X, Half, Y, small_in_g(Half))
U5_GGGG(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
LOG2_IN_AGGG(X, Half, Y, Y) → U5_AGGG(X, Half, Y, small_in_a(X))
LOG2_IN_AGGG(X, Half, Y, Y) → SMALL_IN_A(X)
U5_AGGG(X, Half, Y, small_out_a(X)) → U6_AGGG(X, Half, Y, small_in_g(Half))
U5_AGGG(X, Half, Y, small_out_a(X)) → SMALL_IN_G(Half)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PrologToPiTRSProof
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PrologToPiTRSProof
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ PiDP
↳ PrologToPiTRSProof
U3_GGGG(Half, Acc, Y, small_out_g) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g
small_in_g(s(0)) → small_out_g
small_in_g(x0)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
small_in_g(s(0)) → small_out_g
POL(0) = 0
POL(LOG2_IN_GGGG(x1, x2, x3, x4)) = 1 + x1 + x2 + x3 + x4
POL(U3_GGGG(x1, x2, x3, x4)) = 1 + x1 + x2 + x3 + x4
POL(s(x1)) = 1 + x1
POL(small_in_g(x1)) = 2 + x1
POL(small_out_g) = 2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
↳ PiDP
↳ PrologToPiTRSProof
U3_GGGG(Half, Acc, Y, small_out_g) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g
small_in_g(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PrologToPiTRSProof
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PrologToPiTRSProof
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Instantiation
↳ PrologToPiTRSProof
LOG2_IN_AGGG(Half, Acc, Y) → LOG2_IN_AGGG(s(Half), Acc, Y)
LOG2_IN_AGGG(s(z0), z1, z2) → LOG2_IN_AGGG(s(s(z0)), z1, z2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Instantiation
↳ QDP
↳ Instantiation
↳ PrologToPiTRSProof
LOG2_IN_AGGG(s(z0), z1, z2) → LOG2_IN_AGGG(s(s(z0)), z1, z2)
LOG2_IN_AGGG(s(s(z0)), z1, z2) → LOG2_IN_AGGG(s(s(s(z0))), z1, z2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Instantiation
↳ QDP
↳ Instantiation
↳ QDP
↳ NonTerminationProof
↳ PrologToPiTRSProof
LOG2_IN_AGGG(s(s(z0)), z1, z2) → LOG2_IN_AGGG(s(s(s(z0))), z1, z2)
LOG2_IN_AGGG(s(s(z0)), z1, z2) → LOG2_IN_AGGG(s(s(s(z0))), z1, z2)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
LOG2_IN_AG(X, Y) → U1_AG(X, Y, log2_in_aggg(X, 0, s(0), Y))
LOG2_IN_AG(X, Y) → LOG2_IN_AGGG(X, 0, s(0), Y)
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → U2_AGGG(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → U3_AGGG(X, Half, Acc, Y, small_in_a(X))
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_A(X)
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → U4_AGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → U2_GGGG(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → U4_GGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(X, Half, Y, Y) → U5_GGGG(X, Half, Y, small_in_g(X))
LOG2_IN_GGGG(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGG(X, Half, Y, small_out_g(X)) → U6_GGGG(X, Half, Y, small_in_g(Half))
U5_GGGG(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
LOG2_IN_AGGG(X, Half, Y, Y) → U5_AGGG(X, Half, Y, small_in_a(X))
LOG2_IN_AGGG(X, Half, Y, Y) → SMALL_IN_A(X)
U5_AGGG(X, Half, Y, small_out_a(X)) → U6_AGGG(X, Half, Y, small_in_g(Half))
U5_AGGG(X, Half, Y, small_out_a(X)) → SMALL_IN_G(Half)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
LOG2_IN_AG(X, Y) → U1_AG(X, Y, log2_in_aggg(X, 0, s(0), Y))
LOG2_IN_AG(X, Y) → LOG2_IN_AGGG(X, 0, s(0), Y)
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → U2_AGGG(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → U3_AGGG(X, Half, Acc, Y, small_in_a(X))
LOG2_IN_AGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_A(X)
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → U4_AGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_AGGG(X, Half, Acc, Y, small_out_a(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → U2_GGGG(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → U4_GGGG(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(X, Half, Y, Y) → U5_GGGG(X, Half, Y, small_in_g(X))
LOG2_IN_GGGG(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGG(X, Half, Y, small_out_g(X)) → U6_GGGG(X, Half, Y, small_in_g(Half))
U5_GGGG(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
LOG2_IN_AGGG(X, Half, Y, Y) → U5_AGGG(X, Half, Y, small_in_a(X))
LOG2_IN_AGGG(X, Half, Y, Y) → SMALL_IN_A(X)
U5_AGGG(X, Half, Y, small_out_a(X)) → U6_AGGG(X, Half, Y, small_in_g(Half))
U5_AGGG(X, Half, Y, small_out_a(X)) → SMALL_IN_G(Half)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ PiDP
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
small_in_g(x0)
LOG2_IN_GGGG(X, s(s(Half)), Acc, Y) → U3_GGGG(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGG(X, s(Half), Acc, Y)
POL(0) = 0
POL(LOG2_IN_GGGG(x1, x2, x3, x4)) = 2·x1 + 2·x2 + x3 + x4
POL(U3_GGGG(x1, x2, x3, x4, x5)) = 1 + x1 + 2·x2 + x3 + x4 + x5
POL(s(x1)) = 1 + x1
POL(small_in_g(x1)) = 2 + x1
POL(small_out_g(x1)) = 2 + x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
↳ PiDP
U3_GGGG(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGG(Half, s(0), s(Acc), Y)
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
small_in_g(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
log2_in_ag(X, Y) → U1_ag(X, Y, log2_in_aggg(X, 0, s(0), Y))
log2_in_aggg(s(s(X)), Half, Acc, Y) → U2_aggg(X, Half, Acc, Y, log2_in_aggg(X, s(Half), Acc, Y))
log2_in_aggg(X, s(s(Half)), Acc, Y) → U3_aggg(X, Half, Acc, Y, small_in_a(X))
small_in_a(0) → small_out_a(0)
small_in_a(s(0)) → small_out_a(s(0))
U3_aggg(X, Half, Acc, Y, small_out_a(X)) → U4_aggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(s(s(X)), Half, Acc, Y) → U2_gggg(X, Half, Acc, Y, log2_in_gggg(X, s(Half), Acc, Y))
log2_in_gggg(X, s(s(Half)), Acc, Y) → U3_gggg(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_gggg(X, Half, Acc, Y, small_out_g(X)) → U4_gggg(X, Half, Acc, Y, log2_in_gggg(Half, s(0), s(Acc), Y))
log2_in_gggg(X, Half, Y, Y) → U5_gggg(X, Half, Y, small_in_g(X))
U5_gggg(X, Half, Y, small_out_g(X)) → U6_gggg(X, Half, Y, small_in_g(Half))
U6_gggg(X, Half, Y, small_out_g(Half)) → log2_out_gggg(X, Half, Y, Y)
U4_gggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_gggg(X, s(s(Half)), Acc, Y)
U2_gggg(X, Half, Acc, Y, log2_out_gggg(X, s(Half), Acc, Y)) → log2_out_gggg(s(s(X)), Half, Acc, Y)
U4_aggg(X, Half, Acc, Y, log2_out_gggg(Half, s(0), s(Acc), Y)) → log2_out_aggg(X, s(s(Half)), Acc, Y)
log2_in_aggg(X, Half, Y, Y) → U5_aggg(X, Half, Y, small_in_a(X))
U5_aggg(X, Half, Y, small_out_a(X)) → U6_aggg(X, Half, Y, small_in_g(Half))
U6_aggg(X, Half, Y, small_out_g(Half)) → log2_out_aggg(X, Half, Y, Y)
U2_aggg(X, Half, Acc, Y, log2_out_aggg(X, s(Half), Acc, Y)) → log2_out_aggg(s(s(X)), Half, Acc, Y)
U1_ag(X, Y, log2_out_aggg(X, 0, s(0), Y)) → log2_out_ag(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
LOG2_IN_AGGG(s(s(X)), Half, Acc, Y) → LOG2_IN_AGGG(X, s(Half), Acc, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Instantiation
LOG2_IN_AGGG(Half, Acc, Y) → LOG2_IN_AGGG(s(Half), Acc, Y)
LOG2_IN_AGGG(s(z0), z1, z2) → LOG2_IN_AGGG(s(s(z0)), z1, z2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Instantiation
↳ QDP
↳ Instantiation
LOG2_IN_AGGG(s(z0), z1, z2) → LOG2_IN_AGGG(s(s(z0)), z1, z2)
LOG2_IN_AGGG(s(s(z0)), z1, z2) → LOG2_IN_AGGG(s(s(s(z0))), z1, z2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Instantiation
↳ QDP
↳ Instantiation
↳ QDP
↳ NonTerminationProof
LOG2_IN_AGGG(s(s(z0)), z1, z2) → LOG2_IN_AGGG(s(s(s(z0))), z1, z2)
LOG2_IN_AGGG(s(s(z0)), z1, z2) → LOG2_IN_AGGG(s(s(s(z0))), z1, z2)